#include <linux/module.h> //所有模块都需要的头文件
#include <linux/init.h>   // init&exit相关宏
#include <linux/kernel.h>

//注册内核模块的信息
MODULE_LICENSE("GPL"); //开源协议
MODULE_AUTHOR("random"); //作者信息
MODULE_DESCRIPTION("hello world module");//描述你的模块

// __init 是一个gcc的标记，并非属于标准的C语言，下面的 __exit 同理
// 这两个标记可以帮助内核节省函数占据的存储空间
static int __init hello_init(void)
{
    printk(KERN_WARNING "hello world.\n");
	/*
	your code
	内核代码的bug有极大可能会把内核带崩，所以必须谨慎
	*/
    return 0;
}

static void __exit hello_exit(void)
{
	/*
	应当在此释放掉占用的资源
	*/
    printk(KERN_WARNING "hello exit!\n");
}
 
module_init(hello_init); //当模块被加载时回调hello_init
module_exit(hello_exit); //当模块被卸载时回调hello_exit
